package com.youlu.campus.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlu.campus.base.base.EntityBase;
import com.youlu.campus.entity.ca.GiftCaInfo;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * 证书基础信息
 */
@Getter
@Setter
@Document(collection = "ca_info")
public class CaInfo extends EntityBase {
    private String category;
    @Indexed
    private String caGroupInfoId;
    private String caGroupInfoName;
    /**
     * 自动加入购物车
     */
    private Boolean autoAddCart=Boolean.FALSE;
    /**
     * 活动ID
     */
    @Indexed
    private String activityId;
    /**
     * 活动名字
     */
    private String activityName;
    /**
     * 证书名
     */
    private String name;
    /**
     * 证书编号
     */
    @Indexed
    protected String certificateNo;
    /**
     * 版本,塑封版、精装版
     */
    private String edition;
    /**
     * 证书材质,0:电子,1:纸质,2:电子+纸质
     */
    private Integer materials = 0;
    /**
     * 证书基础图片
     */
    protected String certificateImage;


    private String[] certificateImages = new String[]{};
    /**
     * 证书生成后的图片
     */
    protected String certificateFinalImage;
    /**
     * 盖章图片
     */
    protected String stampImage;
    /**
     * 证书类型
     */
    protected String caType;
    /**
     * 发证机构
     */
    protected String organization;
    /**
     * 付费类型,0:免费,1:现金,2:积分,3:会员
     */
    private Integer payType;
    /**
     * 价格,单位分,积分也一样,免费为0,如果是积分的话
     */
    private Integer price = 0;
    /**
     * 价格描述，例如：邮费:
     */
    private String priceDesc;
    /**
     * 原价
     */
    private Integer originalPrice = 0;
    /**
     * 成本价
     */
    private Integer costPrice;
    /**
     * 快递费用
     */
    private Integer expressFee = 0;
    /**
     * 数量,如果不限制数量，可以标记为65536
     */
    private Integer num = 65536;
    /**
     * 开始时间
     */
    private Date startTime;
    /**
     * 结束时间
     */
    private Date endTime;
    /**
     * 有货提示
     */
    private String tips;
    /**
     * 会员是否免费
     */
    private Boolean vipFree = Boolean.FALSE;
    /**
     * 商品编码
     */
    private String goodsCode;
    /**
     * 状态
     */
    private Boolean status = Boolean.TRUE;
    /**
     * 是否上架
     */
    private Boolean onSale = Boolean.TRUE;
    /**
     * 证书详情,富文本
     */
    private String detail;
    /**
     * 等级
     */
    @Indexed(background = true)
    private String level;
    /**
     * 等级名字
     */
    private String groupName;


    private String materialStr;
    /**
     * 赠品信息
     */
    private String gift;
    /**
     * 排序号
     */
    private Integer priority = 10;
    /**
     * icon图
     */
    private String iconImageUrl;
    /**
     * 主图
     */
    private String mainImageUrl;
    /**
     * 图片组
     */
    private List<String> imageUrls = new ArrayList<>();

    //是否非证书 true是
    private Boolean caGift = Boolean.FALSE;
    /**
     * 邮费提示语
     */
    private String expressFeeTips;
    /**
     * 是否允许超卖
     */
    private Boolean canOverbought = Boolean.TRUE;
    /**
     * 制作周期,天为单位
     */
    private Integer productionCycle = 7;
    /**
     * 材质配置
     */
    @Indexed
    private String materialConfigId;
    /**
     * 赠品材质配置
     */
    private String giftMaterialConfigId;
    /**
     * 是否上架
     */
    private Boolean onShelf = Boolean.FALSE;
    /**
     * 是否参与商品补贴
     */
    private Boolean doCaSubsidy = Boolean.TRUE;
    /**
     * 材质配置名
     */
    private String materialConfigName;
    /**
     * 赠品材质名
     */
    private String giftMaterialConfigName;
    /**
     * 赠品材质配置数组
     */
    private List<String> giftMaterialConfigIds;
    /**
     * 有库存发货周期
     */
    private Integer inStockCycle = 7;
    /**
     * 无库存发货周期
     */
    private Integer noStockCycle = 17;
    /**
     * 赠品商品信息
     */
    private List<GiftCaInfo> giftItems;
    /**
     * 无货提示语
     */
    private String noStockTips;
    /**
     * 有货提示语
     */
    private String inStockTips;
    /**
     * 已经占用数量
     */
    private Integer occupiedStock;
    /**
     * 下单时是否默认选中
     */
    @Indexed(background = true)
    private Boolean checked = Boolean.FALSE;
    /* 标签 */
    private String caTag;
    /* 特点 */
    private List<String> caFeatures = new ArrayList<>();
    ;
    /* 备注 */
    private String caRemark;

    /**
     * 1、证书
     * 2、礼品
     * 3、证书+礼品
     */
    private Integer itemType;

    /**
     * 商品包含材质
     */
    private List<String> itemMaterialList;
    /**
     * 是否包含虚拟商品
     */
    private Boolean hasVirtualGoods = Boolean.FALSE;
    /**
     * 虚拟商品列表
     */
    private String virtualGoodsList;

    /**
     * 限时扣减金额 单位分
     */
    @Transient
    private Integer deductionMoney;
    /**
     * 是否有效
     */
    @Transient
    private Boolean deductionExpire = false;
    /**
     * 是否组合商品
     */
    private Boolean combinedCommodity = Boolean.FALSE;
    /**
     * 父级Id
     */
    private String parentId;
    /**
     * 子商品商品信息
     */
    @Transient
    private List<CaInfo> childrenItem = new ArrayList<>();
    /**
     * 是否有优惠，默认否
     */
    private Boolean hasDiscount = Boolean.FALSE;
    /**
     * 邮费费用，单位:分
     */
    private Integer discountFee = 0;
    /**
     * 平台补贴提示语
     */
    private String discountTips;
    /**
     * 是否有活动券
     */
    private Boolean hasActivityCoupon = Boolean.FALSE;
    /**
     * 活动券个数
     */
    private Integer activityCouponNum;
    /**
     * 活动券金额,单位分
     */
    private Integer activityCouponFee;
    /**
     * 领取状态,
     * todo:待领取
     * done:已领取
     * expired:已过
     * disabled:不可领取
     */
    private String claimStatus = "todo";
}
